package net.towee.server.authentication.impl;

import javax.inject.Inject;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.inject.name.Named;

import net.towee.server.CoreSettings;
import net.towee.server.authentication.EmailSender;
import net.towee.server.authentication.SessionAuthManager;
import net.towee.server.persistence.AccountStore;
import net.towee.server.persistence.ConfirmStore;

public class EmailSenderImpl implements EmailSender {
	private static final Logger LOG = LoggerFactory.getLogger(EmailSenderImpl.class);
	private final int smtpPort;
	private final String smtpHost;
	private final String smptUser;
	private final String smtpPass;
	
	@Inject
	public EmailSenderImpl(@Named(CoreSettings.SMTP_HOST) String smtpHost,
			@Named(CoreSettings.SMTP_PORT) int smtpPort,
			@Named(CoreSettings.SMTP_USER) String smtpUser, @Named(CoreSettings.SMTP_PASS) String smtpPass) {
		this.smptUser = smtpUser;
		this.smtpHost = smtpHost;
		this.smtpPass = smtpPass;
		this.smtpPort = smtpPort;
	}

	@Override
	public boolean sendFeedback(String userName, String message) {
		try {
			// Create the email message
			HtmlEmail email = new HtmlEmail();
			email.setHostName(smtpHost);
			email.setSmtpPort(smtpPort);
			email.setTLS(true);
			email.setAuthentication(smptUser, smtpPass);
			email.addTo("viiv.c58@gmail.com", "Администратор");
			email.setFrom("noreply@towee.net", "Towee.net");
			email.setSubject("Отзыв от "+userName);
			email.setCharset("UTF-8");

			// set the alternative message
			email.setTextMsg(message);

			// send the email
			email.send();
			return true;
		} catch (EmailException e) {
			LOG.error("Email sending exception: " + e.getMessage());
		}
		
		return false;
	}

	@Override
	public boolean sendRegistrationEmail(String name, String emailAddr, String password, String confirm) {		
		try {
			// Create the email message
			HtmlEmail email = new HtmlEmail();
			email.setHostName(smtpHost);
			email.setSmtpPort(smtpPort);
			email.setTLS(true);
			email.setAuthentication(smptUser, smtpPass);
			email.addTo(emailAddr, name);
			email.setFrom("noreply@towee.net", "Towee.net");
			email.setSubject("Регистрация на Towee.net");
			email.setCharset("UTF-8");

			// set the html message
			email.setHtmlMsg("<html>Привет, Новый Пользователь!"
					+ "<br /><br />Вы зарегистрированы на Towee.net со следующими данными:<br /><b>Логин</b>: "
					+ emailAddr
					+ "<br /><b>Пароль</b>: "
					+ password + "<br />"
					+ ((confirm != null) ? "Для активации аккаунта перейдите по ссылке: <a href=\"http://towee.net/auth/email?confirm="+confirm+"\">тык</a>" : "")
					+ "<br /><br />Любые Ваши данные Вы можете изменить в разделе \"Я\"<br />Если вы ничего не знаете о Towee.net и знать не хотите, просто проигнорируйте это письмо.<br /><font color=\"#aaa\">----<br />С уважением, Администрация проекта<br /><a href=\""
					+ "http://towee.net" + "\">Towee.net</a></font></html>");

			// set the alternative message
			email.setTextMsg("Привет, "+name+"!"
					+ "\nВы зарегистрированы на Towee.net со следующими данными:\nЛогин: "
					+ emailAddr
					+ "\nПароль: "
					+ password+"\n"
					+ ((confirm != null) ? "Для активации аккаунта перейдите по ссылке: http://towee.net/auth/email?confirm="+confirm : "")
					+ "\nЛюбые Ваши данные Вы можете изменить в разделе \"Я\"\nЕсли вы ничего не знаете о Towee.net и знать не хотите, просто проигнорируйте это письмо.\n----\nС уважением, Администрация проекта\nTowee.net");

			// send the email
			email.send();
			return true;
		} catch (EmailException e) {
			LOG.error("Email sending exception: " + e.getMessage());
		}
		
		return false;
	}


}
